import pandas as pd
import matplotlib.pyplot as plt
import requests
import chardet
from bs4 import BeautifulSoup
from openpyxl import Workbook

# 设置请求头，模拟浏览器访问
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}

# 请求网页内容
url = 'https://upc.edu.cn'
response = requests.get(url, headers=headers)

# 检测网页编码，进行相应的编码转换
encoding = chardet.detect(response.content)['encoding']
html = response.content.decode(encoding).encode('utf-8')

# 解析网页内容，提取表格信息
soup = BeautifulSoup(html, 'html.parser')
table = soup.find('table')

# 创建Excel工作簿，添加表格数据
workbook = Workbook()
worksheet = workbook.active
for row in table.find_all('tr'):
    row_data = []
    for cell in row.find_all('td'):
        row_data.append(cell.text.strip())
    worksheet.append(row_data)

# 保存Excel文件
workbook.save(r'D:\2024大学计算机报告\table.xlsx')

print("表格保存成功 ")

# 读取 Excel 文件
file_path=r"D:\2024大学计算机报告\table.xlsx"
df = pd.read_excel(file_path)

# 设置中文字体
plt.rcParams['font.sans-serif']=['SimHei']

# 绘制柱状图
plt.bar(df.loc[[2,3],'指标'], df.loc[[2,3],'绝对量（元）'])
plt.title('全国居民人均可支配收入（按常住地分）')
plt.xlabel('项目')
plt.ylabel('数值/元')
plt.show()

plt.bar(df.loc[[5,6,7],'指标'], df.loc[[5,6,7],'绝对量（元）'])
plt.title('全国居民人均可支配收入（按收入来源分）')
plt.xlabel('项目')
plt.ylabel('数值/元')
plt.show()

plt.bar(df.loc[[11,12],'指标'], df.loc[[11,12],'绝对量（元）'])
plt.title('全国居民人均可支配收入中位数')
plt.xlabel('项目')
plt.ylabel('数值/元')
plt.show()

plt.bar(df.loc[[15,16],'指标'], df.loc[[15,16],'绝对量（元）'])
plt.title('全国居民人均消费支出（按常住地分）')
plt.xlabel('项目')
plt.ylabel('数值/元')
plt.show()

plt.bar(df.loc[18:25,'指标'], df.loc[18:25,'绝对量（元）'])
plt.title('全国居民人均消费支出（按消费类别分）')
plt.xlabel('项目')
plt.ylabel('数值/元')
plt.show()

# 绘制饼状图


plt.pie(df.loc[[2,3],'绝对量（元）'], labels=df.loc[[2,3],'指标'],autopct='%1.1f%%')
    
plt.title('全国居民人均可支配收入（按常住地分）')
plt.show()


plt.pie(df.loc[[5,6,7],'绝对量（元）'], labels=df.loc[[5,6,7],'指标'],autopct='%1.1f%%')
plt.title('全国居民人均可支配收入（按收入来源分）')
plt.show()


plt.pie(df.loc[[11,12],'绝对量（元）'], labels=df.loc[[11,12],'指标'],autopct='%1.1f%%')
plt.title('全国居民人均可支配收入中位数')
plt.show()


plt.pie(df.loc[[15,16],'绝对量（元）'], labels=df.loc[[15,16],'指标'],autopct='%1.1f%%')
plt.title('全国居民人均消费支出（按常住地分）')
plt.show()


plt.pie(df.loc[18:25,'绝对量（元）'], labels=df.loc[18:25,'指标'],autopct='%1.1f%%')
plt.title('全国居民人均消费支出（按消费类别分）')
plt.show()
